package 数组排序;

import java.util.Arrays;
import java.util.Comparator;

class Product {
    private String name;
    private double price;    // 价格
    private int sales;       // 销量
    private double rating;   // 评分（0-5分）

    public Product(String name, double price, int sales, double rating) {
        this.name = name;
        this.price = price;
        this.sales = sales;
        this.rating = rating;
    }

    // 省略getter方法
    public double getPrice() { return price; }
    public int getSales() { return sales; }
    public double getRating() { return rating; }
    public String getName() { return name; }

    @Override
    public String toString() {
        return String.format("%-8s | ￥%-6.1f | 销量:%-4d | 评分:%.1f", 
                name, price, sales, rating);
    }
}

public class ProductSortingDemo {
    public static void main(String[] args) {
        // 创建商品数组
        Product[] products = {
            new Product("手机", 3999, 1500, 4.7),
            new Product("耳机", 299, 8000, 4.9),
            new Product("平板", 2999, 3000, 4.5),
            new Product("充电宝", 199, 10000, 4.3),
            new Product("手机", 3599, 2500, 4.6)  // 同类型不同价格
        };

        System.out.println("========== 排序前 ==========");
        Arrays.stream(products).forEach(System.out::println);

        // 使用Comparator定义多级排序规则
        Arrays.sort(products, Comparator
                .comparingDouble(Product::getPrice)      // 第一级：价格升序
                .thenComparingInt(Product::getSales).reversed()  // 第二级：销量降序
                .thenComparingDouble(Product::getRating).reversed() // 第三级：评分降序
        );

        System.out.println("\n========== 排序后（价格↑ > 销量↓ > 评分↓） ==========");
        Arrays.stream(products).forEach(System.out::println);
    }
}